package cn.shop.cloud.common;

/**
 * @program: shop-parent
 * @ClassName Result
 * @description:
 * @author: Mokio
 * @create: 2024−12-23 21:59
 * @Version 2024 2.2 ; jdk1.8.0_181
 **/
/*
定义结果返回值
T表示返回值类型
这里完成了对于返回值结果的封装，要理解装箱，拆箱的概念
*/
public class Result<T> {
    // Result中包含的属性信息
    public Integer code;
    public String msg;
    public T data;

    // 构造方法
    public Result() {
    }

    public Result(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    // getter setter方法
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    // 成功码和信息
    public static final int SUCCESS_CODE=200;
    public static final String SUCCESS_MESSAGE="操作成功";

    // 失败码和信息
    public static final int ERROR_CODE=500000;
    public static final String ERROR_MESSAGE="系统异常";


    // 返回成功信息时方法，只传数据回去
    public static <T> Result<T> success(T data){
        return new Result<>(SUCCESS_CODE,SUCCESS_MESSAGE,data);
    }

    // 返回成功信息时方法，传数据和信息
    public static  <T> Result<T> success(String msg,T data){
        return  new Result<>(SUCCESS_CODE,msg,data);
    }

    // 返回失败信息时方法，传错误码和错误信息，那就是传CodeMsg对象，因为错误，无返回数据
    public static  <T> Result<T> error(CodeMsg codeMsg){
        return  new Result<>(codeMsg.getCode(),codeMsg.getMsg(),null);
    }

    // 返回默认失败信息
    public static  <T> Result<T> defaultError(){
        return  new Result<>(ERROR_CODE,ERROR_MESSAGE,null);
    }

    // 判断是否有错
    public boolean hasError(){
        return this.code!=SUCCESS_CODE;
    }
}
